package com.bright.ghj.overt.manager;

import com.bright.ghj.common.pojo.dto.PageDTO;
import com.bright.ghj.overt.pojo.dto.FileItemDTO;
import com.bright.ghj.overt.pojo.dto.FileListDTO;
import com.bright.ghj.overt.pojo.dto.TableDataDTO;
import com.bright.ghj.overt.pojo.query.TableDataQuery;
import com.bright.ghj.overt.pojo.vo.SaveResultVO;
import com.fasterxml.jackson.core.JsonProcessingException;

import java.util.List;
import java.util.Map;

public interface BaseDataManager {

    /**
     * 查询公开表内容 分页查询
     * @param tableDataQuery 查询条件对象
     * @param fileList
     * @param fileItems
     * @return
     */
    PageDTO<Map<String, Object>> pageTableData(TableDataQuery tableDataQuery, FileListDTO fileList, List<FileItemDTO> fileItems);

    /**
     * 查询公开表内容 不分页
     * @param tableDataQuery
     * @param fileList
     * @param fileItems
     * @return
     */
    List<Map<String, Object>> listTableData(TableDataQuery tableDataQuery, FileListDTO fileList, List<FileItemDTO> fileItems);

    /**
     * 保存数据
     * @param tableDataDTO 数据对象
     */
    SaveResultVO saveTableData(TableDataDTO tableDataDTO, FileListDTO fileList, List<FileItemDTO> fileItems) throws JsonProcessingException;

    /**
     * 保存数据 直接接收map列表 兼容多年月多账套号批量插入
     * 注意：只执行insert 不先删除原有数据
     * @param tableDataList 插入数据 注意：要先赋值好年、月、账套号等字段
     * @param fileList
     * @param fileItems
     */
    void insertTableDataByArray(List<Map<String, Object>> tableDataList, FileListDTO fileList, List<FileItemDTO> fileItems);

    /**
     * 保存前检验数据是否合规 如类型校验
     * @param tableDataList
     * @param fileList
     * @param fileItems
     * @return
     */
    List<String> checkDataValid(List<Map<String, Object>> tableDataList, FileListDTO fileList, List<FileItemDTO> fileItems);

}
